// 此pinia管理地址  包括编辑地址页 和 地址列表页的逻辑
import { defineStore } from "pinia";
import { computed, reactive, ref, watch } from "vue";

export const useLocationStore = defineStore("location", () => {
  // 存放地址的列表
  const locationsList = reactive([
    {
      id: "1",
      name: "王五",
      tel: "15697822760",
      address: "浙江省杭州市西湖区文三路 138 号东方通信大厦 7 楼 501 室",
      isDefault: true,
    },
    {
      id: "2",
      name: "karina",
      tel: "19247052497",
      address: "韩国京畿道城南市盆塘区漕街520号",
      isDefault: false,
    },
  ]);
const defaultAddressText = computed(() => {
  const address = locationsList.find(item => item.isDefault)?.address || "默认地址"
  // 限制最多显示6个字
  return address.length > 6 ? address.substring(0, 6) + '...' : address
})
  // 当前选中的地址ID（用于AddressList组件的v-model绑定）  如果v-model绑定的的是computed则会出现警告 毕竟计算属性不能被修改
  const chosenAddressId = ref(locationsList.find(item => item.isDefault)?.id || "1");

  // 动态计算默认地址的ID（只读，用于其他地方使用）
  const defaultAddressId = computed(() => {
    return locationsList.find((item) => item.isDefault)?.id || "1";
  });

  // 监视locationsList的变化，当有新的默认地址加入时自动处理
  watch(
    () => locationsList.map(item => ({ id: item.id, isDefault: item.isDefault })),
    (newList, oldList) => {
      // 检查是否有新的默认地址被添加
      const newDefaultAddress = newList.find(item => item.isDefault && !oldList.some(oldItem => oldItem.id === item.id));
      
      if (newDefaultAddress) {
        // 更新chosenAddressId为新id
        chosenAddressId.value = newDefaultAddress.id;
        
        // 将旧的默认地址的isDefault设为false
        locationsList.forEach(item => {
          if (item.id !== newDefaultAddress.id && item.isDefault) {
            item.isDefault = false;
          }
        });
      }
    },
    { deep: true }
  );

  const changeDefault = (id) => {
    // 先将所有地址的 isDefault 设为 false
    locationsList.forEach(item => {
      item.isDefault = false;
    });
    // 根据传入的 id 找到对应的地址对象，并将其 isDefault 设为 true
    const targetAddress = locationsList.find(item => item.id === id);
    if (targetAddress) {
      targetAddress.isDefault = true;
      // 同时更新选中的地址ID
      chosenAddressId.value = id;
    }
  }
    const deleteLocation = (id) => {
    // 找到要删除的地址
    const index = locationsList.findIndex(item => item.id === id);
    if (index === -1) return;
    
    const deletedAddress = locationsList[index];
    const isDefaultAddress = deletedAddress.isDefault;
    
    // 删除地址
    locationsList.splice(index, 1);
    
    // 如果删除的是默认地址，并且还有剩余地址，将第一个地址设为默认
    if (isDefaultAddress && locationsList.length > 0) {
      locationsList[0].isDefault = true;
      chosenAddressId.value = locationsList[0].id;
    }
    
    // 如果删除后没有地址了，重置chosenAddressId
    if (locationsList.length === 0) {
      chosenAddressId.value = "";
    }
  }
    
  return { locationsList, chosenAddressId, defaultAddressId, changeDefault, deleteLocation, defaultAddressText };
});
